package priv.xakml.toolkit;

import java.io.*;

/**
 * 文件相关操作的辅助类
 */
public class FileToolkit {

    /**
     * 检查文件是否存在
     *
     * @param file_name
     * @return
     */
    public boolean fileExists(String file_name) {
        java.io.File file = new java.io.File(file_name);
        return file.exists();
    }

    /**
     * 使用"UTF-8"的编码方式读取文本文件中的内容(大文件请使用其他方法)
     * @param file_name 文件名称
     * @return 返回文件的内容
     * @throws IOException 文件不存在时,则会抛出此类型的异常
     */
    public String readTextFromFile(String file_name) throws IOException {
        return this.readTextFromFile(file_name,"UTF-8");
    }
    /**
     * 读取文本文件中的内容(大文件请使用其他方法)
     * @param file_name 文件名称
     * @param charset_name 读取文本文件时用到的字符集名称,可空,默认为"UTF-8"
     * @return 返回文件的内容
     * @throws IOException 文件不存在时,则会抛出此类型的异常
     */
    public String readTextFromFile(String file_name, String charset_name) throws IOException {
        if (!this.fileExists(file_name))
            throw new IOException("指定的文件不存在");
        StringBuffer temp = new StringBuffer();
        FileInputStream fin = new FileInputStream(file_name);
        InputStreamReader reader = null;
        if(charset_name == null)
            reader =new InputStreamReader(fin,"utf-8");
        else
            reader =new InputStreamReader(fin,charset_name);

        BufferedReader buffReader = new BufferedReader(reader);
        String readedLine = null;
        while ((readedLine = buffReader.readLine()) != null) {
            temp.append(readedLine);
        }
        buffReader.close();
        reader.close();
        fin.close();
        return temp.toString();
    }
    /**
     * 写入文本到文件(默认编码为:UTF-8)
     * 如果文件已存在,则会覆盖
     *
     * @param content_text 需要写入的内容
     * @param file_name    文件名称
     */
    public void writeTextToFile(String content_text, String file_name) {
        File file = new File(file_name);
        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        try {
            if (!file.exists()) {
                boolean hashFile = file.createNewFile();
                if (hashFile) {
                    System.out.println("file not exists create new file");
                }
                fos = new FileOutputStream(file);
            } else {
                System.out.println("file exists");
                fos = new FileOutputStream(file, false);
            }

            osw = new OutputStreamWriter(fos, "utf-8");
            osw.write(content_text);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (osw != null) {
                    osw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}